package code.c02_list.sqList;

import code.c02_list.sqList.SqListClass;

/**
 * @author thinkpad - 83start
 * @version v1.0
 * @create 2022/9/11 20:31
 * @package code.c02_list.classwork.examples
 * @description 对于整体顺序表L，删除其中所有的元素x
 *
 */

public class Exam_2_4 {
    /**
     * 对于整体顺序表L，删除其中所有的元素x
     *
     * @param L
     * @param x
     */
    public static void deleteAllX01(SqListClass<Integer> L, Integer x) {
        int k = 0;
        for (int i = 0; i < L.size(); i++) {
            // 将不为 x 的元素插入到data中
            if (!L.getElem(i).equals(x)) {
                L.setElem(k, L.getElem(i));
                k++;
            }
        }
        // 重置顺序表的长度
        L.setsize(k);
    }

    /**
     * 解法2
     *
     * @param L
     * @param x
     */
    public static void deleteAllX02(SqListClass<Integer> L, Integer x) {
        int k = 0;
        for (int i = 0; i < L.size(); i++) {
            if (!L.getElem(i).equals(x)) {
                L.setElem(i - k, L.getElem(i));
            } else {
                k++;
            }
        }
        L.setsize(L.size() - k);
    }

    /**
     * 方法3
     *
     * @param L
     * @param x
     */
    public static void deleteAllX03(SqListClass<Integer> L, Integer x) {
        int i = -1;
        int j = 0;
        Integer tmp;
        while (j < L.size()) {
            if (L.getElem(j) != x) {
                i++;
                if (i != j) {
                    L.swap(i, j);
                }
            }
            j++;
        }
        L.setsize(i + 1);
    }

}
